#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QFileDialog>
#include <QDesktopServices>

#include <QFile>
#include <QDir>
#include <QMediaDevices>
#include <QAudioFormat>
#include <QAudioSource>
#include <QDateTime>
#include <QTimer>
#include <QRegularExpression>
#include <QMessageBox>

#include <QDebug>

QT_BEGIN_NAMESPACE
namespace Ui
{
    class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    static QString styleBtnEnableT; // 按钮 使能 样式
    static QString styleBtnEnableF; // 按钮 不使能 样式

    QString filePath;             // 文件路径
    QString labelName;            // 标签名
    QString currFileNameRaw;      // 当前文件名 RAW 格式
    QString currFileNameWav;      // 当前文件名 WAV 格式
    QVector<qint16> audioSamples; // 音频样本

    QFile destinationFile;      // 录音文件
    QAudioSource *audio;        // 录音设备
    int audioSampleRate = 8000; // 音频采样率

    bool isFileNameValid(const QString &); // 判断文件名是否有效

    void recordAudio(); // 录制音频
    void saveWavFile(); // 加载原始数据，画图；保存wav文件

public slots:
    void handleStateChanged(QAudio::State); // 处理录音状态改变
    void stopRecording();                   // 停止录音
};
#endif // MAINWINDOW_H
